package org.smile.homework02.hyl;

import lombok.Data;

@Data
public class Vehicle implements Generator {

    //通过接口生成了车
    //1.0生成车



    public Vehicle() {
        this.number = generateNumber();
        this.type = generateType(); //生成随机类型
    }

    //1.1车牌号
    private String number;
    //1.2车的类型
    private String type;
 //    private  Integer  inStorageTime=(int) (Math.random() * 10 + 1);
 //    private  Integer  outStorageTime=(int) (Math.random() * 10 + 1);

    private Integer enterTime;//进入停车场时间
    //1.3占用的停车位
    //    private ParkingSpace parkingSpace;

    //2.进入停车场   xxx车进入停车场，记录时间
    public void enterParkingLot(ParkingLot parkingLot, Integer time) {
        //设置车进入停车场的time
        setEnterTime(time);
        parkingLot.handleEnterParkingLot(this, time);
    System.out.println(this.number+"【"+enterTime+"】" + "进入停车场");


    //停车位，找停车位，如果不为空，登记停车位的号码
        Integer parkingSpaceNumber = lookForParkingSpace(parkingLot);
        if (parkingSpaceNumber != null) {
            enterParkingSpace(parkingLot, parkingSpaceNumber);
        } else {
            leaveParkingLot(parkingLot, time);
        }

    }

    //3.找停车位
    public Integer lookForParkingSpace(ParkingLot parkingLot) {

        for (ParkingSpace parkingSpace : parkingLot.getParkingSpaces()) {
            if (!parkingSpace.isOccupied() && parkingSpace.getType().equals(this.getType())) {
                System.out.println(this.getNumber() + "找停车位");
                return parkingSpace.getNumber();
            }
        }
        System.out.println(this.getNumber() + "没找停车位");
        return null;


    }

    //4.进入停车位
    public void enterParkingSpace(ParkingLot parkingLot, Integer parkingSpaceNumber) {
        parkingLot.handleEnterParkingSpace(this, parkingSpaceNumber);
        System.out.println(this.number+"【"+enterTime+"】" + "进入【"+parkingSpaceNumber+"】停车位");
    }

    //5.离开停车位
    public void leaveParkingSpace(ParkingLot parkingLot, Integer parkingSpaceNumber) {
        parkingLot.handleLeaveParkingSpace(parkingSpaceNumber);
        System.out.println(this.number + "【"+enterTime+"】"+"离开停车位");
    }

    //6.离开停车场
    public void leaveParkingLot(ParkingLot parkingLot, Integer time) {
        parkingLot.handleLeaveParkingLot(this, time);
        System.out.println(this.number+"【"+enterTime+"】" + "离开停车场");
    }

    //7.决定是否离开: false 不离开，true 离开
    public boolean decideLeave() {
        int random = generateDecimal();
        switch (random) {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
                return false;
            case 8:
            case 9:
            default:
                return true;
        }
    }

    public void describe() {
        System.out.format("车牌号：%s, [车位类型：%s]\n", this.getNumber(), this.getType());
    }
    // parklot类需做的事情，
    // 1、首先需要在车类定义一个获取时间的方法，或者自动生成一个时间，或者通过输入台的方式，
    //2、vehicleMark 不能用了，封装了2个类， 需要知道哪个车，车的时间记录。车是自动生成的，
    // 车进入停车场知道了时间，同时也要和车位做一个匹配，并且是否有占用状态，没有，听进去
    //public void handleLeaveParkingLot(Vehicle vehicle)，得到getNumber()
    //进入停车位，离开停车位，和停车位名单关联，没有时间。
    //public Integer countAmount(Vehicle vehicle, Integer time) 算钱，涉及到recordTime，需调用获取时间的方法，在
    //这里得到  Integer recordTime，
    //运营函数，没有找到入库时间

    // 车类

}




